package com.qiaoba.module.system.service;

import com.qiaoba.module.system.entity.SysDictData;
import com.qiaoba.module.system.entity.dto.SysDictDataDTO;
import com.qiaoba.module.system.entity.param.SysDictDataParam;

import java.util.List;

/**
 * 字典数据 服务层
 *
 * @author ailanyin
 * @date 2023-09-10 17:29:44
 */
public interface SysDictDataService {

    /**
     * 新增字典数据
     *
     * @param dto 字典数据
     * @return 结果
     */
    int insert(SysDictDataDTO dto);

    /**
     * 修改字典数据
     *
     * @param dto 字典数据
     * @return 结果
     */
    int update(SysDictDataDTO dto);

    /**
     * 批量删除字典数据
     *
     * @param ids 需要删除的字典数据ID
     * @return 结果
     */
    int deleteByIds(List<String> ids);

    /**
     * 查询字典数据
     *
     * @param dictCode  字典数据ID
     * @param allowNull 允许为空
     * @return 字典数据
     */
    SysDictData selectById(String dictCode, boolean allowNull);

    /**
     * 查询列表
     *
     * @param param param
     * @return list
     */
    List<SysDictData> selectList(SysDictDataParam param);

    /**
     * 根据类型查询字典数据
     *
     * @param dictType 字典类型
     * @return 字典数据集合
     */
    List<SysDictData> selectByDictType(String dictType);

    /**
     * 根据字典类型查询字典数据
     *
     * @param dictType 字典类型
     * @return 字典数据集合信息
     */
    List<SysDictData> selectFromCache(String dictType);

    /**
     * 重置字典缓存数据
     */
    void resetDictCache();

    /**
     * 根据字典类型和字典键值查询字典数据信息
     *
     * @param dictType  字典类型
     * @param dictValue 字典键值
     * @return 字典标签
     */
    String selectDictLabel(String dictType, String dictValue);

}
